<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //数据引用问题
      //因为数据在内存的储存方式的问题
      /*      【内存】     
        【 栈  】         【 堆 】
        (简单数据类型互不影响) 
        var a=  ..=>10 
        var b=a ..=>10
        
        var array= ------>[1,2,5,9,10] 
                            ⬆   引用类型 在内存的堆里指向相同地址
        var array1=array----|
        */
      //简单数据类型 不会存在引用问题   存在内存的栈里 存的是值
      //复杂数据类型  会出现问题    地址存在栈里  值存在堆里
      //对象 数组 函数 正则表达式
      //  var arr1 = [1,2,3];
      // //  var arr2 = arr1;
      // //  arr2[1] = 'hello';
      // //  console.log(arr2);  //[1,'hello',3]
      // //  console.log(arr1); //[1,2,3] 错的  [1,'hello',3]

      // //在堆里开辟一个空间 称为深拷贝
      // var arr2= []
      // arr1.forEach(item=>{
      //     arr2.push(item)
      // })
      // arr2[1] = 'hello';
      // console.log(arr1);
      // 如果是多层也需要开辟新的空间  深层的深拷贝
      var obj = {
        name: '张三',
        age: 20,
        myobj: {
          myname: 'hello',
        },
      }
      //   var obj2 = obj
      //   obj.age = 30
      //   console.log(obj2)
      var obj2 = new Object()
      for (let key in obj) {
        obj2[key] = obj[key]
      }
      obj.age = 30
      console.log(obj2)
      obj.myobj.myname = '王五'
      console.log(obj2)
      
    </script>
  </body>
</html>
